package src.main.java.entity;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import src.main.java.modules.container.EstoqueCaller;

public class CarrinhoTO {

	private List<ProdutoTO> produtos;

	private BigDecimal valorFrete;

	public List<ProdutoTO> getProdutos() {
		if(produtos==null){
			produtos = new ArrayList<ProdutoTO>();
		}

		return produtos;
	}

	public void setProdutos(List<ProdutoTO> produtos) {
		this.produtos = produtos;
	}

	public Double getValorTotal() {
		Double valor = 0.0;

		DecimalFormat df = new DecimalFormat("#.##");
		
		for (ProdutoTO prod : produtos) {
			valor += (prod.getValor() * prod.getQuantidade());
		}
		return valor;
	}

	public BigDecimal getValorFrete() {
		//usar componente de calcular frete
		return valorFrete;
	}

	public void setValorFrete(BigDecimal valorFrete) {
		this.valorFrete = valorFrete;
	}

	public boolean adicionarProduto(ProdutoTO produto){
		EstoqueTO estoque = EstoqueCaller.buscaEstoqueProduto(produto.getCodigo());
		Boolean retorno = true;
		boolean encontrou = false;
		ProdutoTO prod = null;
		if(estoque != null && estoque.getProduct() != null){
			Iterator<ProdutoTO> iter = getProdutos().iterator();
			while (iter.hasNext()) {
				prod = iter.next();
				if(prod.getCodigo()==produto.getCodigo()){
					iter.remove();
					prod.setQuantidade((prod.getQuantidade()+1));
					if (estoque.getProduct().getQuantity() < prod.getQuantidade()){
						prod.setQuantidade((prod.getQuantidade()-1));
						retorno = false;
					} 
					encontrou = true;
				}
			}

			if(!encontrou){
				getProdutos().add(produto);
			}else{
				getProdutos().add(prod);
			}
			return retorno;
		} 
		
		return false;
	}

	public void removerProduto(Long codigo){
		for(ProdutoTO prod: getProdutos()){
			if(prod.getCodigo().equals(codigo)){
				getProdutos().remove(prod);
				return;
			}
		}
	}
}
